package com.nfit.rabbitmq.producer;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * ClassName:DefaultProducer
 * Package:com.nfit.rabbitmq.producer
 * Description
 *
 * 不指定交换机链接默认交换机
 *实现思路：第一步：初始化链接工厂设置主机地址,通信端口，用户名和密码
 *  第二步：创建链接(使用try-with-resources语句确保连接在使用完毕后会被自动关闭。)
 *  第三步：创建通道,利用通道建立一个队列 :channel.queueDeclare(QUEUE_NAME, false, false, false, null);
 *          如果队列已经存在，则不会重复创建
 *          （因为第二个参数durable设置为false，表示非持久化队列；
 *          第三个参数exclusive为false，表示非排他性队列；
 *          第四个参数autoDelete为false，表示不会自动删除）。
 *
 * 第四步：这里定义了要发送的消息内容，并通过通道将其发送到之前声明的队列中。
 *
 * @Author L
 * @Create 2024/11/21 15:13
 */
public class DefaultProducer {

    /**
     * 自定义消息队列的名称
     */
    private static final String QUEUE_NAME = "default_queue";

    public static void main(String[] args) {
        //第一步：初始化链接工厂并设置rabbitmq的主机地址
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setPort(5672); //通信接口,1572是rabbitmq端口
        factory.setUsername("guest");
        factory.setPassword("guest");
        //第二步：创建链接
        try (Connection conn = factory.newConnection()){
            //第三步 使用链接构建一个通信通道
            Channel channel = conn.createChannel();
            //利用这个通道创建一个队列（如果队列存在测不会在创建）,声明队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            //第四步：定义消息
            String message = "Hello World! rabbitmq-projuct";
            //推送消息
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException("Can't connect to RabbitMQ");
        }

    }

}
